// class Solution {
// public:
//     int brokenCalc(int startValue, int target) {
//         if(startValue >= target) return startValue - target;
//         vector<int> path(1, target);
//         int cur = target;
//         while(startValue < cur)
//         {
//             cur = ++cur >> 1;
//             path.push_back(cur);
//         }
//         cur = startValue;
//         int ret = 0;
//         // for(auto e : path) cout << e << ' '; cout << endl;
//         while(path.size())
//         {
//             int tmp = path.back();
//             path.pop_back();
//             ret += startValue - tmp;
//             startValue = tmp * 2;
//             if(path.size()) ret++;
//         }
//         return ret;
//     }
// };

class Solution {
public:
    int brokenCalc(int startValue, int target) {
        int count = 0;
        while (startValue < target)
        {
            count++;
            if (target & 1) target++;
            else target >>= 1;
        }
        return startValue - target + count;
    }
};